// // #include<stdio.h>
// // #include <stdlib.h>
// // #include <time.h>
// // #include <sys/time.h>
// // #include <unistd.h>

// // int main() {
// //     // 设置新的时间，例如 "2022-06-01 12:00:00"
// //     struct tm new_time;
// //     new_time.tm_year = 2022 - 1900;  // 年份，从1900年开始计算
// //     new_time.tm_mon = 5 - 1;         // 月份，从0开始计算
// //     new_time.tm_mday = 1;            // 日期
// //     new_time.tm_hour = 12;           // 小时
// //     new_time.tm_min = 0;             // 分钟
// //     new_time.tm_sec = 0;             // 秒

// //     // 将 struct tm 转换为 time_t 类型
// //     time_t new_time_t = mktime(&new_time);

// //     // 修改虚拟机的系统时间
// //     int result = stime(&new_time_t);
// //     if (result == 0) {
// //         printf("成功修改时间\n");
// //     } else {
// //         perror("修改时间失败");
// //     }

// //     return 0;
// // }
// // #include<stdio.h>
// // #include <stdlib.h>
// // #include<string.h>
// // #include <sys/socket.h>
// // #include <arpa/inet.h>
// // #include <netinet/in.h>
// // #include <time.h>
// // #include <unistd.h>

// // #define NTP_SERVER "time.windows.com"
// // #define NTP_PORT 123

// // int main(void)
// // {
// //     int sockfd;
// //     struct sockaddr_in serv_addr;
// //     unsigned char buffer[48] = {0};
// //     time_t timestamp;

// //     // 创建套接字
// //     sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// //     if (sockfd < 0)
// //     {
// //         perror("socket");
// //         exit(EXIT_FAILURE);
// //     }

// //     // 设置服务器地址和端口
// //     memset(&serv_addr, 0, sizeof(serv_addr));
// //     serv_addr.sin_family = AF_INET;
// //     serv_addr.sin_port = htons(NTP_PORT);
// //     serv_addr.sin_addr.s_addr = inet_addr(NTP_SERVER);

// //     // 发送NTP请求
// //     buffer[0] = 0b00011011; // LI = 0, VN = 3, Mode = 3 (Client Mode)
// //     sendto(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

// //     // 接收NTP响应
// //     recvfrom(sockfd, buffer, sizeof(buffer), 0, NULL, NULL);

// //     // 解析NTP响应
// //     timestamp = ntohl(*(uint32_t *)&buffer[40]) - 2208988800UL;

// //     // 关闭套接字
// //     close(sockfd);

// //     // 打印时间
// //     printf("NTP Time: %s", ctime(&timestamp));

// //     return 0;
// // }
// #include <stdio.h>
// #include <stdlib.h>
// #include <string.h>
// #include <sys/socket.h>
// #include <netinet/in.h>
// #include <arpa/inet.h>
// #include <time.h>

// #define PORT 12345

// int main()
// {
//     int sockfd;
//     struct sockaddr_in addr;
//     struct msghdr msg;
//     struct iovec iov;
//     struct cmsghdr *cmsg;
//     char buf[1024];
//     char control[CMSG_SPACE(sizeof(struct timeval))];

//     // 创建套接字
//     sockfd = socket(AF_INET, SOCK_DGRAM, 0);
//     if (sockfd < 0)
//     {
//         perror("socket");
//         exit(EXIT_FAILURE);
//     }

//     // 设置目标IP地址为宿主机IP
//     memset(&addr, 0, sizeof(addr));
//     addr.sin_family = AF_INET;
//     addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 宿主机IP地址
//     addr.sin_port = htons(PORT);

//     // 发送消息给宿主机
//     iov.iov_base = buf;
//     iov.iov_len = sizeof(buf);
//     msg.msg_name = (struct sockaddr *)&addr;
//     msg.msg_namelen = sizeof(addr);
//     msg.msg_control = control;
//     msg.msg_controllen = CMSG_SPACE(sizeof(struct timeval));
//     msg.msg_flags = 0;

//     cmsg = (struct cmsghdr *)msg.msg_control;
//     cmsg->cmsg_len = CMSG_LEN(sizeof(struct timeval));
//     cmsg->cmsg_level = SOL_SOCKET;
//     cmsg->cmsg_type = SCM_TIMESTAMP;

//     sendmsg(sockfd, &msg, 0);

//     // 等待宿主机回应
//     recvmsg(sockfd, &msg, 0);

//     // 从控制信息中读取宿主机时间
//     struct timeval *tv = (struct timeval *)CMSG_DATA(cmsg);
//     printf("Host time: %ld.%06ld", tv->tv_sec, tv->tv_usec);

//     close(sockfd);

//     return 0;
// }